package com.hjq.demo.other

import android.content.Context
import androidx.core.content.ContextCompat
import cn.cucsi.myframe.R
import com.luck.picture.lib.config.PictureMimeType
import com.yalantis.ucrop.UCrop
import java.io.File

/**
 * @author : 20720
 * @time   : 2024/6/4
 * desc    :
 */
object UCropUtils {

    /**
     * 图片裁剪 矩形裁剪框
     *
     * @return
     */
    fun buildOptionsRectangle(context: Context): UCrop.Options {
        val options = UCrop.Options()
        options.setToolbarTitle("裁剪图片") // 设置裁剪图片页面标题
        options.setHideBottomControls(false) // 设置为true以隐藏底部控件（默认显示）
        options.setFreeStyleCropEnabled(true) // 设置为true以允许用户调整裁剪边界的大小（默认情况下禁用）
        options.setShowCropFrame(true) // 如果希望在图像顶部看到裁剪框矩形，请设置为true
        options.setShowCropGrid(true) // 如果希望在图像顶部看到裁剪格线，请设置为true
        options.setCircleDimmedLayer(false) // 如果您希望暗显层内部有一个圆，请将其设置为true
        options.withAspectRatio(1f, 1f) // 设置裁剪边界的纵横比。用户将看不到带有其他比率选项的菜单。
        options.setCropOutputPathDir(getSandboxPath(context)) // 设置context.getExternalFilesDir（）剪切多个图形时将用于保存的路径剪切多个图片时有效
        options.isCropDragSmoothToCenter(false) // 自动居中裁剪和拖动
        options.setSkipCropMimeType(getNotSupportCrop().toString()) // 需要跳过裁剪的类型
        options.isForbidCropGifWebp(false) // 需要支持剪切动态图形gif还是webp吗
        options.isForbidSkipMultipleCrop(true) // 剪切多个图形时禁止跳过
        options.setMaxScaleMultiplier(100f)
        options.setStatusBarColor(
            ContextCompat.getColor(
                context,
                R.color.ps_color_grey
            )
        )
        options.setToolbarColor(ContextCompat.getColor(context, R.color.ps_color_grey))
        options.setToolbarWidgetColor(
            ContextCompat.getColor(
                context,
                R.color.ps_color_white
            )
        )
        return options
    }

    /**
     * 图片裁剪 圆形裁剪框
     *
     * @return
     */
    fun buildOptionsCircle(context: Context): UCrop.Options {
        val options = UCrop.Options()
        options.setHideBottomControls(false) // 设置为true以隐藏底部控件（默认显示）
        options.setFreeStyleCropEnabled(true) // 设置为true以允许用户调整裁剪边界的大小（默认情况下禁用）
        options.setShowCropFrame(false) // 如果希望在图像顶部看到裁剪框矩形，请设置为true
        options.setShowCropGrid(false) // 如果希望在图像顶部看到裁剪格线，请设置为true
        options.setCircleDimmedLayer(true) // 如果您希望暗显层内部有一个圆，请将其设置为true
        options.withAspectRatio(1f, 1f) // 设置裁剪边界的纵横比。用户将看不到带有其他比率选项的菜单。
        options.setCropOutputPathDir(getSandboxPath(context)) // 设置context.getExternalFilesDir（）剪切多个图形时将用于保存的路径剪切多个图片时有效
        options.isCropDragSmoothToCenter(false) // 自动居中裁剪和拖动
        options.setSkipCropMimeType(getNotSupportCrop().toString()) // 需要跳过裁剪的类型
        options.isForbidCropGifWebp(false) // 需要支持剪切动态图形gif还是webp吗
        options.isForbidSkipMultipleCrop(true) // 剪切多个图形时禁止跳过
        options.setMaxScaleMultiplier(100f)
        options.setStatusBarColor(
            ContextCompat.getColor(
                context,
                R.color.ps_color_grey
            )
        )
        options.setToolbarColor(ContextCompat.getColor(context, R.color.ps_color_grey))
        options.setToolbarWidgetColor(
            ContextCompat.getColor(
                context,
                R.color.ps_color_white
            )
        )
        return options
    }


    fun getNotSupportCrop(): Array<String>? {
        return arrayOf(PictureMimeType.ofGIF(), PictureMimeType.ofWEBP())
    }


    /**
     * 创建自定义输出目录
     *
     * @return
     */
    fun getSandboxPath(context: Context): String {
        val customFile = File(context.cacheDir.path, "Sandbox")
        if (!customFile.exists()) {
            customFile.mkdirs()
        }
        return customFile.absolutePath + File.separator
    }
}